package org.dromara.vmp.gb28181.bean;


import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

import java.io.Serial;
import java.io.Serializable;

/**
 * 国标设备/平台
 *
 * @author lin
 */
@Data
@TableName("wvp_device")
@Schema(description = "国标设备/平台")
public class Device implements Serializable {

    @Serial
    private static final long serialVersionUID = 1L;

    /**
     * 设备国标编号
     */
    @TableId
    @Schema(description = "设备国标编号")
    private String deviceId;

    /**
     * 设备名
     */
    @Schema(description = "名称")
    private String name;

    /**
     * 生产厂商
     */
    @Schema(description = "生产厂商")
    private String manufacturer;

    /**
     * 型号
     */
    @Schema(description = "型号")
    private String model;

    /**
     * 固件版本
     */
    @Schema(description = "固件版本")
    private String firmware;

    /**
     * 传输协议
     * UDP/TCP
     */
    @Schema(description = "传输协议（UDP/TCP）")
    private String transport;

    /**
     * 数据流传输模式
     * UDP:udp传输
     * TCP-ACTIVE：tcp主动模式
     * TCP-PASSIVE：tcp被动模式
     */
    @Schema(description = "数据流传输模式")
    private String streamMode;

    /**
     * wan地址_ip
     */
    @Schema(description = "IP")
    private String ip;

    /**
     * wan地址_port
     */
    @Schema(description = "端口")
    private int port;

    /**
     * wan地址
     */
    @Schema(description = "wan地址")
    private String hostAddress;

    /**
     * 在线
     */
    @Schema(description = "是否在线，true为在线，false为离线")
    private boolean onLine;


    /**
     * 注册时间
     */
    @Schema(description = "注册时间")
    private String registerTime;


    /**
     * 心跳时间
     */
    @Schema(description = "心跳时间")
    private String keepaliveTime;


    /**
     * 心跳间隔
     */
    @Schema(description = "心跳间隔")
    private int keepaliveIntervalTime;

    /**
     * 通道个数
     */
    @TableField(exist = false)
    @Schema(description = "通道个数")
    private int channelCount;

    /**
     * 注册有效期
     */
    @Schema(description = "注册有效期")
    private int expires;

    /**
     * 创建时间
     */
    @Schema(description = "创建时间")
    private String createTime;

    /**
     * 更新时间
     */
    @Schema(description = "更新时间")
    private String updateTime;

    /**
     * 设备使用的媒体id, 默认为null
     */
    @Schema(description = "设备使用的媒体id, 默认为null")
    private String mediaServerId;

    /**
     * 字符集, 支持 UTF-8 与 GB2312
     */
    @Schema(description = "符集, 支持 UTF-8 与 GB2312")
    private String charset;

    /**
     * 目录订阅周期，0为不订阅
     */
    @Schema(description = "目录订阅周期，o为不订阅")
    private int subscribeCycleForCatalog;

    /**
     * 移动设备位置订阅周期，0为不订阅
     */
    @Schema(description = "移动设备位置订阅周期，0为不订阅")
    private int subscribeCycleForMobilePosition;

    /**
     * 移动设备位置信息上报时间间隔,单位:秒,默认值5
     */
    @Schema(description = "移动设备位置信息上报时间间隔,单位:秒,默认值5")
    private int mobilePositionSubmissionInterval = 5;

    /**
     * 报警订阅周期，0为不订阅
     */
    @Schema(description = "报警心跳时间订阅周期，0为不订阅")
    private int subscribeCycleForAlarm;

    /**
     * 是否开启ssrc校验，默认关闭，开启可以防止串流
     */
    @Schema(description = "是否开启ssrc校验，默认关闭，开启可以防止串流")
    private boolean ssrcCheck = false;

    /**
     * 地理坐标系， 目前支持 WGS84,GCJ02
     */
    @Schema(description = "地理坐标系， 目前支持 WGS84,GCJ02")
    private String geoCoordSys;

    @Schema(description = "密码")
    private String password;

    @Schema(description = "收流IP")
    private String sdpIp;

    @Schema(description = "SIP交互IP（设备访问平台的IP）")
    private String localIp;

    @Schema(description = "是否作为消息通道")
    private boolean asMessageChannel;

    @Schema(description = "设备注册的事务信息")
    private SipTransactionInfo sipTransactionInfo;

    @Schema(description = "控制语音对讲流程，释放收到ACK后发流")
    private boolean broadcastPushAfterAck;

    public Integer getStreamModeForParam() {
        if (streamMode == null) {
            return 0;
        }
        if (streamMode.equalsIgnoreCase("UDP")) {
            return 0;
        } else if (streamMode.equalsIgnoreCase("TCP-PASSIVE")) {
            return 1;
        } else if (streamMode.equalsIgnoreCase("TCP-ACTIVE")) {
            return 2;
        }
        return 0;
    }

}
